home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy004 / lowlevel / play.asm next >
Encoding:
Assembly Source File  |  1997-04-20  |  4.1 KB  |  109 lines

  1. ;;;;;;;;;;;;;  RAW-PLAYER  -->  Programa principal!     SB Only
  2.         ;;;;;                   Navi Dj.  1997   PhyMosys
  3. ;;;;;;;;;;;;;  Code 100% assembler (of course)
  4.  
  5. .MODEL SMALL
  6. .STACK 512
  7. .386
  8.  LOCALS @@
  9.  
  10. .CODE
  11. INCLUDE PLAY.INC                ;  Incluimos las definiciones y funciones básicas.
  12.  
  13. ;;;;;   Pseudo-area de datos.
  14. Fichero         DB      'prueba.wav',0  ;  Fichero de pruebas.
  15. Handle          DW      0               ;  Handle de fichero.
  16. Tamanyo         DW      0               ;  Tamaño del fichero RAW.
  17. Msg1            DB      'ERROR: Se ha producido un error inesperado$'
  18.  
  19. ;;;;;  Código
  20. LeeRAW          PROC            ;  Función para cargar el fichero en memoria.
  21.                 PUSH    CS
  22.                 POP     DS
  23.                 MOV     AX, 3D00h
  24.                 MOV     DX, Offset Fichero
  25.                 INT     21h             ;  Abrimos el fichero.
  26.                 JC    @@ERROR           ;  Si hay algún error.
  27.                 MOV     CS:[Handle], AX
  28.  
  29.                 MOV     BX, AX
  30.                 MOV     AX, 4202h
  31.                 XOR     CX, CX
  32.                 MOV     DX, CX
  33.                 INT     21h             ;  Nos vamos al final.
  34.                 JC    @@ERROR
  35.                 MOV     CS:[Tamanyo], AX
  36.  
  37.                 MOV     BX, AX          ;  Pasamos la longitud a párrafos.
  38.                 SHR     BX, 4
  39.                 INC     BX
  40.                 MOV     AH, 48h
  41.                 INT     21h             ;  Pedimos memoria.
  42.                 JC    @@ERROR
  43.                 MOV     DS, AX          ;  Guardamos en FS y DS el segmento.
  44.                 MOV     FS, AX
  45.  
  46.                 MOV     BX, CS:[Handle]
  47.                 MOV     AX, 4200h
  48.                 XOR     CX, CX
  49.                 MOV     DX, CX
  50.                 INT     21h             ;  Resituamos al inicio para leer.
  51.  
  52.                 MOV     CX, CS:[Tamanyo]
  53.                 MOV     AH, 3Fh         ;  Vamos a leer.
  54.                 MOV     BX, CS:[Handle]
  55.                 XOR     DX, DX
  56.                 INT     21h             ;  Leemos...
  57.                 JC    @@ERROR
  58.                 MOV     AH, 3Eh
  59.                 MOV     BX, CS:[Handle]
  60.                 INT     21h
  61.                 CLC
  62.                 RET                     ;  Regresamos sin error.
  63.         @@ERROR:MOV     AH, 3Eh
  64.                 MOV     BX, CS:[Handle]
  65.                 INT     21h
  66.                 STC
  67.                 RET                     ;  Regresamos con error.
  68. LeeRAW          ENDP
  69.  
  70. MainPlay        PROC                    ;  Por aquí se empieza.
  71.                 CALL    LiberaMEM
  72.                 ;  Aquí deberia meterse la llamada a la función de
  73.                 ; detección de la SB (y sus parámetros).
  74.                 CALL    ResetSB         ;  Resetea la SB.
  75.                 CALL    LeeRAW          ;  Carga el fichero WAV.
  76.                 JC    @@MsgERROR
  77.  
  78.                 MOV     AH, 0D1h        ;  Enviamos al DSP el código para
  79.                 CALL    WriteDSP        ; que encienda el speaker.
  80.  
  81.                 XOR     SI, SI
  82.                 MOV     CX, CS:[Tamanyo];  Llamamos a la función para hacer
  83.                 CALL    PlayRAW         ; sonar el fichero.
  84.  
  85.                 MOV     AH, 0D3h        ;  Enviamos al DSP el código para
  86.                 CALL    WriteDSP        ; que se apague el speaker.
  87.  
  88.         @@Salir:MOV     DX, 20h         ;  Reseteamos el servicio de
  89.                 MOV     AL, 20h
  90.                 OUT     DX, AL          ; interrupciones.
  91.  
  92.                 PUSH    FS
  93.                 POP     ES
  94.                 MOV     AH, 49h         ;  Liberamos la memoria que habiamos
  95.                 INT     21h             ; pedido.
  96.                 MOV     AX, 4C00h
  97.                 INT     21h             ;  Salida al DOS.
  98.  
  99.         @@MsgERROR:
  100.                 PUSH    CS
  101.                 POP     DS
  102.                 MOV     AH, 9
  103.                 MOV     DX, Offset Msg1
  104.                 INT     21h             ;  Escribimos el mensaje de error.
  105.                 MOV     AX, 4C00h
  106.                 INT     21h
  107. MainPlay        ENDP
  108.                 END     MainPlay
  109.